home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
LANG
/
C
/
GCC
/
V2-4-5
/
GCCEXTSR
/
Virtual
/
!Virtual
/
s
/
divide
next >
Wrap
Text File
|
1993-04-20
|
7KB
|
297 lines
a1 RN 0
a2 RN 1
a3 RN 2
a4 RN 3
v1 RN 4
v2 RN 5
v3 RN 6
v4 RN 7
v5 RN 8
v6 RN 9
fp RN 10
ip RN 11
sp RN 12
lr RN 14
pc RN 15
f0 FN 0
f1 FN 1
f2 FN 2
f3 FN 3
f4 FN 4
f5 FN 5
f6 FN 6
f7 FN 7
AREA |C$$code|,CODE,READONLY
EXPORT |x$divtest|
|x$divtest|
MOVS pc,lr
EXPORT |x$remainder|
|x$remainder|
STMFD sp!,{lr}
BL |x$divide|
MOV a1,a2
LDMFD sp!,{pc}^
EXPORT |x$uremainder|
|x$uremainder|
STMFD sp!,{lr}
BL |x$udivide|
MOV a1,a2
LDMFD sp!,{pc}^
|x$overflow|
MVN a1,#0
MOVS pc,lr
EXPORT |x$udivide| ; a1 = a2 / a1; a2 = a2 % a1
|x$udivide|
CMP a1,#1
BLO |x$overflow|
BEQ |x$divide_l0|
MOV ip,#0
MOVS a2,a2
BPL |x$divide_l1|
ORR ip,ip,#&20000000; ip bit &20000000 = -ve a2
MOVS a2,a2,LSR #1
ORRCS ip,ip,#&10000000; ip bit &10000000 = bit 0 of a2
B |x$divide_l1|
|x$divide_l0| ; a1 == 1
MOV a1,a2
MOV a2,#0
MOVS pc,lr
EXPORT |x$divide| ; a1 = a2 / a1; a2 = a2 % a1
|x$divide|
CMP a1,#1
BLO |x$overflow|
BEQ |x$divide_l0|
ANDS ip,a1,#&80000000
RSBMI a1,a1,#0
ANDS a3,a2,#&80000000
EOR ip,ip,a3
RSBMI a2,a2,#0
ORR ip,a3,ip,LSR #1 ; ip bit &40000000 = -ve division
; ip bit &80000000 = -ve remainder
|x$divide_l1|
MOV a3,#1
MOV a4,#0
CMP a2,a1
BLO |x$divide_b0|
CMP a2,a1,LSL #1
BLO |x$divide_b1|
CMP a2,a1,LSL #2
BLO |x$divide_b2|
CMP a2,a1,LSL #3
BLO |x$divide_b3|
CMP a2,a1,LSL #4
BLO |x$divide_b4|
CMP a2,a1,LSL #5
BLO |x$divide_b5|
CMP a2,a1,LSL #6
BLO |x$divide_b6|
CMP a2,a1,LSL #7
BLO |x$divide_b7|
CMP a2,a1,LSL #8
BLO |x$divide_b8|
CMP a2,a1,LSL #9
BLO |x$divide_b9|
CMP a2,a1,LSL #10
BLO |x$divide_b10|
CMP a2,a1,LSL #11
BLO |x$divide_b11|
CMP a2,a1,LSL #12
BLO |x$divide_b12|
CMP a2,a1,LSL #13
BLO |x$divide_b13|
CMP a2,a1,LSL #14
BLO |x$divide_b14|
CMP a2,a1,LSL #15
BLO |x$divide_b15|
CMP a2,a1,LSL #16
BLO |x$divide_b16|
CMP a2,a1,LSL #17
BLO |x$divide_b17|
CMP a2,a1,LSL #18
BLO |x$divide_b18|
CMP a2,a1,LSL #19
BLO |x$divide_b19|
CMP a2,a1,LSL #20
BLO |x$divide_b20|
CMP a2,a1,LSL #21
BLO |x$divide_b21|
CMP a2,a1,LSL #22
BLO |x$divide_b22|
CMP a2,a1,LSL #23
BLO |x$divide_b23|
CMP a2,a1,LSL #24
BLO |x$divide_b24|
CMP a2,a1,LSL #25
BLO |x$divide_b25|
CMP a2,a1,LSL #26
BLO |x$divide_b26|
CMP a2,a1,LSL #27
BLO |x$divide_b27|
CMP a2,a1,LSL #28
BLO |x$divide_b28|
CMP a2,a1,LSL #29
BLO |x$divide_b29|
CMP a2,a1,LSL #30
BLO |x$divide_b30|
CMP a2,a1,LSL #31
SUBHS a2,a2,a1,LSL #31
ADDHS a4,a4,a3,LSL #31
CMP a2,a1,LSL #30
SUBHS a2,a2,a1,LSL #30
ADDHS a4,a4,a3,LSL #30
|x$divide_b30|
CMP a2,a1,LSL #29
SUBHS a2,a2,a1,LSL #29
ADDHS a4,a4,a3,LSL #29
|x$divide_b29|
CMP a2,a1,LSL #28
SUBHS a2,a2,a1,LSL #28
ADDHS a4,a4,a3,LSL #28
|x$divide_b28|
CMP a2,a1,LSL #27
SUBHSS a2,a2,a1,LSL #27
ADDHS a4,a4,a3,LSL #27
|x$divide_b27|
CMP a2,a1,LSL #26
SUBHS a2,a2,a1,LSL #26
ADDHS a4,a4,a3,LSL #26
|x$divide_b26|
CMP a2,a1,LSL #25
SUBHS a2,a2,a1,LSL #25
ADDHS a4,a4,a3,LSL #25
|x$divide_b25|
CMP a2,a1,LSL #24
SUBHS a2,a2,a1,LSL #24
ADDHS a4,a4,a3,LSL #24
|x$divide_b24|
CMP a2,a1,LSL #23
SUBHS a2,a2,a1,LSL #23
ADDHS a4,a4,a3,LSL #23
|x$divide_b23|
CMP a2,a1,LSL #22
SUBHS a2,a2,a1,LSL #22
ADDHS a4,a4,a3,LSL #22
|x$divide_b22|
CMP a2,a1,LSL #21
SUBHS a2,a2,a1,LSL #21
ADDHS a4,a4,a3,LSL #21
|x$divide_b21|
CMP a2,a1,LSL #20
SUBHS a2,a2,a1,LSL #20
ADDHS a4,a4,a3,LSL #20
|x$divide_b20|
CMP a2,a1,LSL #19
SUBHS a2,a2,a1,LSL #19
ADDHS a4,a4,a3,LSL #19
|x$divide_b19|
CMP a2,a1,LSL #18
SUBHS a2,a2,a1,LSL #18
ADDHS a4,a4,a3,LSL #18
|x$divide_b18|
CMP a2,a1,LSL #17
SUBHS a2,a2,a1,LSL #17
ADDHS a4,a4,a3,LSL #17
|x$divide_b17|
CMP a2,a1,LSL #16
SUBHS a2,a2,a1,LSL #16
ADDHS a4,a4,a3,LSL #16
|x$divide_b16|
CMP a2,a1,LSL #15
SUBHS a2,a2,a1,LSL #15
ADDHS a4,a4,a3,LSL #15
|x$divide_b15|
CMP a2,a1,LSL #14
SUBHS a2,a2,a1,LSL #14
ADDHS a4,a4,a3,LSL #14
|x$divide_b14|
CMP a2,a1,LSL #13
SUBHS a2,a2,a1,LSL #13
ADDHS a4,a4,a3,LSL #13
|x$divide_b13|
CMP a2,a1,LSL #12
SUBHS a2,a2,a1,LSL #12
ADDHS a4,a4,a3,LSL #12
|x$divide_b12|
CMP a2,a1,LSL #11
SUBHS a2,a2,a1,LSL #11
ADDHS a4,a4,a3,LSL #11
|x$divide_b11|
CMP a2,a1,LSL #10
SUBHS a2,a2,a1,LSL #10
ADDHS a4,a4,a3,LSL #10
|x$divide_b10|
CMP a2,a1,LSL #9
SUBHS a2,a2,a1,LSL #9
ADDHS a4,a4,a3,LSL #9
|x$divide_b9|
CMP a2,a1,LSL #8
SUBHS a2,a2,a1,LSL #8
ADDHS a4,a4,a3,LSL #8
|x$divide_b8|
CMP a2,a1,LSL #7
SUBHS a2,a2,a1,LSL #7
ADDHS a4,a4,a3,LSL #7
|x$divide_b7|
CMP a2,a1,LSL #6
SUBHS a2,a2,a1,LSL #6
ADDHS a4,a4,a3,LSL #6
|x$divide_b6|
CMP a2,a1,LSL #5
SUBHS a2,a2,a1,LSL #5
ADDHS a4,a4,a3,LSL #5
|x$divide_b5|
CMP a2,a1,LSL #4
SUBHS a2,a2,a1,LSL #4
ADDHS a4,a4,a3,LSL #4
|x$divide_b4|
CMP a2,a1,LSL #3
SUBHS a2,a2,a1,LSL #3
ADDHS a4,a4,a3,LSL #3
|x$divide_b3|
CMP a2,a1,LSL #2
SUBHS a2,a2,a1,LSL #2
ADDHS a4,a4,a3,LSL #2
|x$divide_b2|
CMP a2,a1,LSL #1
SUBHS a2,a2,a1,LSL #1
ADDHS a4,a4,a3,LSL #1
|x$divide_b1|
CMP a2,a1
SUBHS a2,a2,a1
ADDHS a4,a4,a3
|x$divide_b0|
TST ip,#&20000000
BNE |x$udivide_l1|
MOV a1,a4
CMP ip,#0
RSBMI a2,a2,#0
MOVS ip,ip,LSL #1
RSBMI a1,a1,#0
MOVS pc,lr
|x$udivide_l1|
TST ip,#&10000000
MOV a2,a2,LSL #1
ORRNE a2,a2,#1
MOV a4,a4,LSL #1
CMP a2,a1
SUBHS a2,a2,a1
ADDHS a4,a4,a3
MOV a1,a4
MOVS pc,lr
END